Skip to content

Conversation

@daleihao
Copy link
Collaborator

@daleihao daleihao commented Oct 21, 2025

Add physically-based and computationally-efficient parameterizations (fineTOP; Hao et al., 2025) in ELM to explicitly resolve fine-scale (e.g., 1 km) topographic effects on downward shortwave and longwave radiation as well as land surface radiative properties.

The new parameterization can be turned on by use_finetop_rad = .true..

A test for the new parameterization is added.

[BFB]

Hao, D., Bisht, G., Li, L., & Leung, L. R. (2025). Representing fine-scale topographic effects on surface radiation balance in hyper-resolution land surface models. Journal of Advances in Modeling Earth Systems, 17, e2025MS004987. https://doi.org/10.1029/2025MS004987


See an example movie below

@rljacob
Copy link
Member

rljacob commented Oct 21, 2025

@daleihao do not merge master in to your feature branch. Undo that commit.

@daleihao daleihao force-pushed the daleihao/lnd/finetop_rad_rebase branch 2 times, most recently from a1efdde to 8e93106 Compare October 21, 2025 12:25
@daleihao
Copy link
Collaborator Author

@daleihao do not merge master in to your feature branch. Undo that commit.

Done.

@rljacob rljacob added the ELM land model label Oct 21, 2025
@rljacob rljacob requested a review from thorntonpe October 21, 2025 16:26
@bishtgautam
Copy link
Contributor

@daleihao, could you please try to rebase this PR off the latest master as there are few conflicts? thanks.

Comment on lines 259 to 260
!write(iulog,*) 'cosinc_gcell',cosinc_gcell(g)
!write(iulog,*) 'coszen_gcell',coszen_gcell(g)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please delete these lines

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

! Cosine solar zenith angle for next time step

deg2rad = SHR_CONST_PI/180._r8
do g = bounds%begg,bounds%endg
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I believe it would be better to refactor the code such that the if (use_finetop_rad) is outside the do-loop as:

if (.not. use_finetop_rad) then

   do g = bounds%begg,bounds%endg
       coszen_gcell(g) = shr_orb_cosz (nextsw_cday, grc_pp%lat(g), grc_pp%lon(g), declinp1)
       cosinc_gcell(g) = coszen_gcell(g)
   enddo

else

   do g = bounds%begg,bounds%endg
       coszen_gcell(g) = shr_orb_cosz (nextsw_cday, grc_pp%lat(g), grc_pp%lon(g), declinp1)
       ...
   enddo

enddo

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

Comment on lines 543 to 545
sza(g) = nan
saa(g) = nan
cosinc(g) = nan
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Initialize them to spval instead of nan.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

Comment on lines 334 to 341
allocate(this%f_short_dir (begg:endg)) ; this%f_short_dir (:) = nan
allocate(this%f_short_dif (begg:endg)) ; this%f_short_dif (:) = nan
allocate(this%f_short_refl (begg:endg,numrad)) ; this%f_short_refl (:,:) = nan
allocate(this%f_long_dif (begg:endg)) ; this%f_long_dif (:) = nan
allocate(this%f_long_refl (begg:endg)) ; this%f_long_refl (:) = nan
allocate(this%sza (begg:endg)) ; this%sza (:) = nan
allocate(this%saa (begg:endg)) ; this%saa (:) = nan
allocate(this%cosinc (begg:endg)) ; this%cosinc (:) = nan
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

set them to spval.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

Comment on lines 581 to 583
endif

if ( use_finetop_rad ) then
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You can combine code to use a single if-conditional

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

Comment on lines +1122 to +1137
if (use_top_solar_rad) then
write(iulog,*) ' use TOP solar radiation parameterization instead of PP'
else
write(iulog,*) ' use_top_solar_rad is False, so do not run TOP solar radiation parameterization'
end if


if (use_finetop_rad) then
write(iulog,*) ' use fineTOP radiation parameterization instead of PP'
else
write(iulog,*) ' use_finetop_rad is False, so do not run fineTOP radiation parameterization'
end if

Copy link
Contributor

@bishtgautam bishtgautam Oct 31, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Need to add a check that both use_top_solar_rad and use_finetop_rad can't be simultaneously true.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done.

@daleihao
Copy link
Collaborator Author

daleihao commented Oct 31, 2025

diurnal_FSDS.mp4

This movie shows the diurnal variation of solar radiation with/without fineTOP over the Sierra Nevada.

debug & define cosinc_col

add model outputs; & modify surface area correction for longwave radiation & debug

correct surface area for thermal radiation for soilT module

update snowsnicar_AD model

change COSINC output name to avoid duplicate

fix a small bug in variable name

fix small bugs

debug

debug

fix bugs

set SZA<85 limit

fix small bugs

fix one bug and add initialization for few variables

fix small bugs

delete log output and add control to adjust albedo

delete log output

delete write output

add more outputs like MODIS daytime and nighttime ST

debug

fix a small bug

add MODIS FSNO output

fix a bug

clean up the code in biogeophys

clean up the code in main

clean up the code

fix urban bug

add code to calculate apparent surface albedo for EAM

fix a small bug

debug

debug & modify code to not change for urban landunits

debug

fix typo

debug

consider the top effects on upward radaiton to sky

debug

Conflicts:
	components/elm/src/biogeophys/SoilFluxesMod.F90
	components/elm/src/biogeophys/SurfaceAlbedoMod.F90
	components/elm/src/main/atm2lndType.F90
	components/elm/src/main/elm_initializeMod.F90

fix a LAI bug

delete ;

debug & add test

add restart variables

fix a bug

debug

debug restart issues

remove log output
@daleihao daleihao force-pushed the daleihao/lnd/finetop_rad_rebase branch 3 times, most recently from 7de7a64 to 788aeab Compare October 31, 2025 20:01
@daleihao daleihao requested a review from bishtgautam November 1, 2025 12:50
fix a typo

add error message

fix a bug to avoid the initilization issue in the debug mode
@daleihao daleihao force-pushed the daleihao/lnd/finetop_rad_rebase branch from 788aeab to 093e6e4 Compare November 1, 2025 15:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ELM land model

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants